from kombu import Queue

BROKER_URL = 'redis://127.0.0.1:6379/1'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'

# TODO 导入Celery 任务
CELERY_IMPORTS = (
    'day04.apps.task',
    'day04.apps.beat_task'
)

"""Celery常用配置"""

# 时区的设置，默认UTC
CELERY_TIMEZONE = 'Asia/Shanghai'

# 是否使用系统本地时区
CELERY_ENABLE_UTC = False

# 配置重写任何任务属性
# 最大调用 10次/秒
CELERY_TASK_ANNOTATIONS = {
    'day04.apps.task': {'rate_limit': '10/s'},
    'day04.apps.beat_task': {'rate_limit': '10/s'}
}

# 是否重试发布任务消息，默认True
CELERY_TASK_PUBLISH_RETRY = True

# 并发的worker(消费者)数量根据cpu决定
CELERYD_CONCURRENCY = 4

# 每次去redis取任务的数量，默认：4
CELERYD_PREFETCH_MULTIPLIER = 4

# 每个worker执行了多少次任务后就会死掉
CELERYD_MAX_TASKS_PER_CHILD = 10

# 单个任务的最大运行时间，例：1分钟
CELERYD_TASK_TIME_LIMIT = 60

# celery任务执行结果的超时时间，例：3分钟
CELERY_TASK_RESULT_EXPIRES = 180

"""3.配置文件的方式 配置对个队列"""
CELERY_QUEUES = (
    Queue('apps_task', routing_key='apps_task'),
    Queue('apps_beat', routing_key='apps_beat')
)
CELERY_ROUTES = {
    'day04.apps.task.add': {'queue': 'apps_task', 'routing_key': 'apps_task'},
    'day04.apps.task.subtract': {'queue': 'apps_task', 'routing_key': 'apps_task'},
    'day04.apps.task.multiply': {'queue': 'apps_task', 'routing_key': 'apps_task'},
    'day04.apps.task.devide': {'queue': 'apps_task', 'routing_key': 'apps_task'}
}

"""配置定时任务"""
from datetime import timedelta
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'beat': {  # 任务名称
        'task': 'day04.apps.beat_task.beat_task',
        # 'schedule': timedelta(seconds=5),  # 执行的频率，每5秒执行一次
        'args': (10, 5),
        'kwargs': {'name': 'zhiliao'},
        'options': {
            'queue': 'apps_beat',
            'routing_key': 'apps_beat'
        },
        'relative': True,   # 时间时钟安排
        # 'schedule': crontab(hour=22, minute=18),    # 晚上22点18分执行
        'schedule': crontab(minute='*/1'),      # 每一分钟执行一次
    }
}
